#ifndef VSSHADERMAP_H
#define VSSHADERMAP_H
#include "VSShaderKey.h"
namespace VSEngine2
{
	class VSShader;
	typedef VSPointer<VSShader> VSShaderPtr;
	typedef VSMapOrder<VSShaderKey,VSShaderPtr> VSShaderSet;
	class VSGRAPHIC_API VSShaderMap : public VSMemObject
	{
		//RTTI
		//DECLARE_RTTI;
		//DECLARE_INITIAL
	public:
		VSShaderMap();
		~VSShaderMap();
	protected:

		
		VSMapOrder<VSUsedName,VSShaderSet> m_ShaderMap;
	public:	
		void SetShader(const VSUsedName & Name,const VSShaderKey & Key,VSShader * pShader);
		VSShaderSet * GetShaderSet(const VSUsedName &Name);
		void DeleteShaderSet(const VSUsedName & Name);
		VSShader * GetShader(const VSUsedName & Name,const VSShaderKey & Key);
		void DeleteShader(const VSUsedName & Name,const VSShaderKey & Key);
		void Clear()
		{
			m_ShaderMap.Clear();
		}
		void GCResource()
		{

		}
		bool IsRealeseAll()
		{
			return (!m_ShaderMap.GetNum());
		}
	};
	//DECLARE_Ptr(VSShaderMap);
	//VSTYPE_MARCO(VSShaderMap);
}
#endif